// 解决副作用函数匿名问题
const data = {text: 'hello'}
let activeEffect = null
const bucket = new Set()
const obj = new Proxy(data, {
  get(target, key) {
    if (activeEffect){
      bucket.add(activeEffect)
    }
    return target[key]
  },
  set(target,key,value) {
    target[key] = value
    bucket.forEach(fn => fn())
    return true
  }
})

function effect(fn) {
  activeEffect = fn
  fn()
}

effect(() => {
  let value = obj.text
  console.log(value)
})

obj.text = 'world'

/**
 * 将副作用函数赋给全局变量activeEffect
 * 将原来的副作用函数中的主要逻辑抽出来, 放进原来的副作用函数中
 * 在原来的副作用函数中, 只做全局赋值操作
 * 缺陷:
 * 如果此时有一个不存在的属性, 那么也会触发更新effect函数, 即使effect和
 * 这个不存在的属性毫无关系; obj.noExist = 'xxx'
 */

